import { ElMessage } from 'element-plus'
import { useUserStore } from '@/stores/user'

/**
 * 通用导出函数
 * @param {string} endpoint - 导出API端点
 * @param {Object} filters - 筛选条件
 * @param {string} defaultFilename - 默认文件名
 */
export const exportData = async (endpoint, filters = {}, defaultFilename = '数据列表.xlsx') => {
  try {
    ElMessage.info('正在导出数据...')
    
    const userStore = useUserStore()
    
    // 构建查询参数
    const params = new URLSearchParams()
    
    // 添加用户ID
    if (userStore.user?.id) {
      params.append('userId', userStore.user.id.toString())
    }
    
    // 添加筛选条件
    Object.entries(filters).forEach(([key, value]) => {
      if (value !== null && value !== undefined && value !== '') {
        params.append(key, value)
      }
    })
    
    // 调用导出API
    const response = await fetch(`/api/export/${endpoint}?${params.toString()}`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${userStore.token}`
      }
    })
    
    if (!response.ok) {
      throw new Error('导出失败')
    }
    
    // 获取文件名
    const contentDisposition = response.headers.get('Content-Disposition')
    let filename = defaultFilename
    if (contentDisposition) {
      const filenameMatch = contentDisposition.match(/filename="(.+)"/)
      if (filenameMatch) {
        filename = filenameMatch[1]
      }
    }
    
    // 下载文件
    const blob = await response.blob()
    const url = window.URL.createObjectURL(blob)
    const a = document.createElement('a')
    a.href = url
    a.download = filename
    document.body.appendChild(a)
    a.click()
    window.URL.revokeObjectURL(url)
    document.body.removeChild(a)
    
    ElMessage.success('导出成功')
  } catch (error) {
    console.error('导出失败:', error)
    ElMessage.error('导出失败')
  }
}

/**
 * 管理员导出函数（不限制用户ID）
 * @param {string} endpoint - 导出API端点
 * @param {Object} filters - 筛选条件
 * @param {string} defaultFilename - 默认文件名
 */
export const exportAdminData = async (endpoint, filters = {}, defaultFilename = '数据列表.xlsx') => {
  try {
    ElMessage.info('正在导出数据...')
    
    const userStore = useUserStore()
    
    // 构建查询参数
    const params = new URLSearchParams()
    
    // 添加筛选条件（管理员导出不限制用户ID）
    Object.entries(filters).forEach(([key, value]) => {
      if (value !== null && value !== undefined && value !== '') {
        params.append(key, value)
      }
    })
    
    // 调用导出API
    const response = await fetch(`/api/export/${endpoint}?${params.toString()}`, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${userStore.token}`
      }
    })
    
    if (!response.ok) {
      throw new Error('导出失败')
    }
    
    // 获取文件名
    const contentDisposition = response.headers.get('Content-Disposition')
    let filename = defaultFilename
    if (contentDisposition) {
      const filenameMatch = contentDisposition.match(/filename="(.+)"/)
      if (filenameMatch) {
        filename = filenameMatch[1]
      }
    }
    
    // 下载文件
    const blob = await response.blob()
    const url = window.URL.createObjectURL(blob)
    const a = document.createElement('a')
    a.href = url
    a.download = filename
    document.body.appendChild(a)
    a.click()
    window.URL.revokeObjectURL(url)
    document.body.removeChild(a)
    
    ElMessage.success('导出成功')
  } catch (error) {
    console.error('导出失败:', error)
    ElMessage.error('导出失败')
  }
}
